{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "\"\"\"A very simple MNIST classifier.\n",
    "See extensive documentation at\n",
    "https://www.tensorflow.org/get_started/mnist/beginners\n",
    "\"\"\"\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "#可视化\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "FLAGS = None"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们在这里调用系统提供的Mnist数据函数为我们读入数据，如果没有下载的话则进行下载。\n",
    "\n",
    "<font color=#ff0000>**这里将data_dir改为适合你的运行环境的目录**</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-1f2e3e29ecda>:3: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting Mnist_data/train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting Mnist_data/train-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "Extracting Mnist_data/t10k-images-idx3-ubyte.gz\n",
      "Extracting Mnist_data/t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\ProgramData\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784) (55000, 10)\n"
     ]
    }
   ],
   "source": [
    "# Import data\n",
    "data_dir = 'Mnist_data/'\n",
    "mnist = input_data.read_data_sets(data_dir, one_hot=True)\n",
    "print(mnist.train.images.shape,mnist.train.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义各层神经元数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_input_layer = 28 * 28  # 输入层\n",
    "n_output_layer = 10  # 输出层\n",
    "\n",
    "# 层数的选择：线性数据使用1层，非线性数据使用2层, 超级非线性使用3+层。层数、神经元过多会导致过拟合\n",
    "n_layer_1 = 500  # hide layer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义3隐层神经网络\n",
    "def neural_network(x):\n",
    "    # 定义第一层\"神经元\"的权重和biases\n",
    "    layer_1_w_b = {'w_': tf.Variable(tf.truncated_normal([n_input_layer, n_layer_1])),\n",
    "                   'b_': tf.Variable(tf.constant(0.1, shape=[n_layer_1]))}\n",
    "    # 定义输出层\"神经元\"的权重和biases\n",
    "    layer_output_w_b = {'w_': tf.Variable(tf.truncated_normal([n_layer_1, n_output_layer])),\n",
    "                        'b_': tf.Variable(tf.constant(0.1, shape=[n_output_layer]))}\n",
    " \n",
    "    # w·x+b\n",
    "    layer_1 = tf.add(tf.matmul(x, layer_1_w_b['w_']), layer_1_w_b['b_'])\n",
    "    layer_1 = tf.nn.relu(layer_1)  # 激活函数 relu sigmoid  tanh elu  softplus\n",
    "    layer_output = tf.add(tf.matmul(layer_1, layer_output_w_b['w_']), layer_output_w_b['b_'])\n",
    " \n",
    "    return layer_output, layer_1_w_b, layer_output_w_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 每次使用100条数据进行训练\n",
    "batch_size = 100\n",
    "\n",
    "x = tf.placeholder(dtype=tf.float32, shape=[None, n_input_layer])   # 输入数据占位符\n",
    "y = tf.placeholder(dtype=tf.float32, shape=[None, n_output_layer])   # 输出数据占位符"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用数据训练神经网络\n",
    "def train_neural_network(X, Y, epochs=10):\n",
    "    #创建神经网络\n",
    "    y, layer_1_w_b, layer_output_w_b = neural_network(X)\n",
    "    #代价函数\n",
    "    cost_func = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(Y,1), logits= y))\n",
    "    #惩罚因子\n",
    "    regularization_rate = 0.0001\n",
    "    #计算L2正则化损失函数\n",
    "    regularizer = tf.contrib.layers.l2_regularizer(regularization_rate)\n",
    "    #将变量的L2正则化损失添加到集合中\n",
    "    regularization = regularizer(layer_1_w_b['w_']) +  regularizer(layer_output_w_b['w_'])\n",
    "    \n",
    "    #获取整个模型的损失函数,tf.get_collection(\"losses\")返回集合中定义的损失\n",
    "    #将整个集合中的损失相加得到整个模型的损失函数\n",
    "    loss = cost_func + regularization\n",
    "\n",
    "    #学习速率，随迭代次数进行递减\n",
    "    global_step = tf.Variable(0, trainable=False)\n",
    "    #设置基础学习率\n",
    "    starter_learning_rate = 0.8\n",
    "    #设置学习率的衰减率\n",
    "    learning_rate_decay = 0.99\n",
    "    #设置指数衰减学习率\n",
    "    learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, mnist.train.num_examples/batch_size, learning_rate_decay)\n",
    "    \n",
    "    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)  \n",
    "    \n",
    "    #每迭代一次需要更新神经网络中的参数\n",
    "    train_op = tf.group(train_step)\n",
    " \n",
    "    with tf.Session() as session:\n",
    "        session.run(tf.global_variables_initializer())\n",
    "        \n",
    "        correct = tf.equal(tf.argmax(y, 1), tf.argmax(Y, 1))\n",
    "        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))\n",
    "        \n",
    "#         epoch_accuracy_mat = []\n",
    "#         epoch_accuracy_t_mat = []\n",
    "#         #迭代训练\n",
    "#         for i in range(30000):\n",
    "#             batch_xs,batch_ys = mnist.train.next_batch(batch_size)\n",
    "#             session.run(train_op,feed_dict={X: batch_xs, Y: batch_ys, global_step:i})\n",
    "#             if i % 1000 == 0 or i % (int(mnist.train.num_examples / batch_size)) == 0:\n",
    "#                 epoch_accuracy = accuracy.eval({X: mnist.train.images, Y: mnist.train.labels})\n",
    "#                 epoch_accuracy_t = accuracy.eval({X: mnist.test.images, Y: mnist.test.labels})\n",
    "#                 print('i ', i, ' accuracy  : ', epoch_accuracy)\n",
    "#                 print('i ', i, ' accuracy_t: ', epoch_accuracy_t)\n",
    "#                 epoch_accuracy_mat.append(epoch_accuracy)\n",
    "#                 epoch_accuracy_t_mat.append(epoch_accuracy_t)\n",
    " \n",
    "        epoch_loss = 0\n",
    "        epoch_loss_mat = []\n",
    "        epoch_accuracy_mat = []\n",
    "        epoch_accuracy_t_mat = []\n",
    "        for epoch in range(epochs):\n",
    "            for i in range(int(mnist.train.num_examples / batch_size)):\n",
    "                batch_xs, batch_ys = mnist.train.next_batch(batch_size)\n",
    "                _, cost_vel = session.run([train_op, loss], feed_dict={X: batch_xs, Y: batch_ys, global_step:i*(epoch+1)})\n",
    "                epoch_loss += cost_vel\n",
    "            epoch_accuracy = accuracy.eval({X: mnist.train.images, Y: mnist.train.labels})\n",
    "            epoch_accuracy_t = accuracy.eval({X: mnist.test.images, Y: mnist.test.labels})\n",
    "            print('epoch ', epoch, ' loss      : ', epoch_loss)\n",
    "            print('epoch ', epoch, ' accuracy  : ', epoch_accuracy)\n",
    "            print('epoch ', epoch, ' accuracy_t: ', epoch_accuracy_t)\n",
    "            epoch_loss_mat.append(epoch_loss)\n",
    "            epoch_accuracy_mat.append(epoch_accuracy)\n",
    "            epoch_accuracy_t_mat.append(epoch_accuracy_t)\n",
    "            epoch_loss = 0\n",
    "        \n",
    "        print('训练准确率: ', accuracy.eval({X: mnist.train.images, Y: mnist.train.labels}))\n",
    "        print('测试准确率: ', accuracy.eval({X: mnist.test.images, Y: mnist.test.labels}))\n",
    "        \n",
    "        plt.plot(range(epochs), epoch_loss_mat) \n",
    "        plt.xlabel('epochs')\n",
    "        plt.ylabel('epoch_loss')\n",
    "        plt.show() \n",
    "        \n",
    "        plt.plot(range(epochs), epoch_accuracy_mat, label='Train Accuracy') \n",
    "        plt.plot(range(epochs), epoch_accuracy_t_mat, label='Test Accuracy')\n",
    "        plt.legend()\n",
    "        plt.xlabel('epochs')\n",
    "        plt.ylabel('accuracy')\n",
    "        plt.show() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch  0  loss      :  12042.064374923706\n",
      "epoch  0  accuracy  :  0.9092909\n",
      "epoch  0  accuracy_t:  0.8927\n",
      "epoch  1  loss      :  7877.292245864868\n",
      "epoch  1  accuracy  :  0.93036366\n",
      "epoch  1  accuracy_t:  0.9131\n",
      "epoch  2  loss      :  7173.269562721252\n",
      "epoch  2  accuracy  :  0.9496727\n",
      "epoch  2  accuracy_t:  0.9266\n",
      "epoch  3  loss      :  6558.241467475891\n",
      "epoch  3  accuracy  :  0.9574182\n",
      "epoch  3  accuracy_t:  0.9329\n",
      "epoch  4  loss      :  6005.170042991638\n",
      "epoch  4  accuracy  :  0.9676727\n",
      "epoch  4  accuracy_t:  0.9408\n",
      "epoch  5  loss      :  5504.733511924744\n",
      "epoch  5  accuracy  :  0.97156364\n",
      "epoch  5  accuracy_t:  0.9438\n",
      "epoch  6  loss      :  5051.184616088867\n",
      "epoch  6  accuracy  :  0.9754182\n",
      "epoch  6  accuracy_t:  0.9467\n",
      "epoch  7  loss      :  4637.561653137207\n",
      "epoch  7  accuracy  :  0.98054546\n",
      "epoch  7  accuracy_t:  0.9522\n",
      "epoch  8  loss      :  4260.9840631484985\n",
      "epoch  8  accuracy  :  0.9836182\n",
      "epoch  8  accuracy_t:  0.9552\n",
      "epoch  9  loss      :  3916.467454433441\n",
      "epoch  9  accuracy  :  0.98623633\n",
      "epoch  9  accuracy_t:  0.9541\n",
      "epoch  10  loss      :  3602.0756816864014\n",
      "epoch  10  accuracy  :  0.98774546\n",
      "epoch  10  accuracy_t:  0.9569\n",
      "epoch  11  loss      :  3314.4290862083435\n",
      "epoch  11  accuracy  :  0.9886182\n",
      "epoch  11  accuracy_t:  0.9599\n",
      "epoch  12  loss      :  3051.5633273124695\n",
      "epoch  12  accuracy  :  0.9910182\n",
      "epoch  12  accuracy_t:  0.9599\n",
      "epoch  13  loss      :  2810.891034603119\n",
      "epoch  13  accuracy  :  0.9909273\n",
      "epoch  13  accuracy_t:  0.9617\n",
      "epoch  14  loss      :  2590.4170260429382\n",
      "epoch  14  accuracy  :  0.99365455\n",
      "epoch  14  accuracy_t:  0.9626\n",
      "epoch  15  loss      :  2388.477607727051\n",
      "epoch  15  accuracy  :  0.99423635\n",
      "epoch  15  accuracy_t:  0.9617\n",
      "epoch  16  loss      :  2202.9294769763947\n",
      "epoch  16  accuracy  :  0.9946909\n",
      "epoch  16  accuracy_t:  0.964\n",
      "epoch  17  loss      :  2033.5307087898254\n",
      "epoch  17  accuracy  :  0.99603635\n",
      "epoch  17  accuracy_t:  0.9646\n",
      "epoch  18  loss      :  1877.3579025268555\n",
      "epoch  18  accuracy  :  0.99596363\n",
      "epoch  18  accuracy_t:  0.9655\n",
      "epoch  19  loss      :  1734.3485970497131\n",
      "epoch  19  accuracy  :  0.9968182\n",
      "epoch  19  accuracy_t:  0.9654\n",
      "epoch  20  loss      :  1602.9832932949066\n",
      "epoch  20  accuracy  :  0.99654543\n",
      "epoch  20  accuracy_t:  0.9667\n",
      "epoch  21  loss      :  1482.1123614311218\n",
      "epoch  21  accuracy  :  0.99776363\n",
      "epoch  21  accuracy_t:  0.9678\n",
      "epoch  22  loss      :  1371.0953028202057\n",
      "epoch  22  accuracy  :  0.99792725\n",
      "epoch  22  accuracy_t:  0.9685\n",
      "epoch  23  loss      :  1268.8945755958557\n",
      "epoch  23  accuracy  :  0.9984364\n",
      "epoch  23  accuracy_t:  0.9678\n",
      "epoch  24  loss      :  1175.0255212783813\n",
      "epoch  24  accuracy  :  0.9982182\n",
      "epoch  24  accuracy_t:  0.9687\n",
      "epoch  25  loss      :  1088.659728884697\n",
      "epoch  25  accuracy  :  0.9987636\n",
      "epoch  25  accuracy_t:  0.9695\n",
      "epoch  26  loss      :  1008.8877806663513\n",
      "epoch  26  accuracy  :  0.9988545\n",
      "epoch  26  accuracy_t:  0.9701\n",
      "epoch  27  loss      :  935.744655251503\n",
      "epoch  27  accuracy  :  0.99912727\n",
      "epoch  27  accuracy_t:  0.9722\n",
      "epoch  28  loss      :  868.1287548542023\n",
      "epoch  28  accuracy  :  0.99921817\n",
      "epoch  28  accuracy_t:  0.9719\n",
      "epoch  29  loss      :  805.8927366733551\n",
      "epoch  29  accuracy  :  0.99938184\n",
      "epoch  29  accuracy_t:  0.9722\n",
      "epoch  30  loss      :  748.3559808731079\n",
      "epoch  30  accuracy  :  0.99938184\n",
      "epoch  30  accuracy_t:  0.9727\n",
      "epoch  31  loss      :  695.4494817256927\n",
      "epoch  31  accuracy  :  0.99936366\n",
      "epoch  31  accuracy_t:  0.973\n",
      "epoch  32  loss      :  646.5069571733475\n",
      "epoch  32  accuracy  :  0.9995273\n",
      "epoch  32  accuracy_t:  0.9742\n",
      "epoch  33  loss      :  601.3009738922119\n",
      "epoch  33  accuracy  :  0.99936366\n",
      "epoch  33  accuracy_t:  0.9736\n",
      "epoch  34  loss      :  559.7166725993156\n",
      "epoch  34  accuracy  :  0.9996\n",
      "epoch  34  accuracy_t:  0.9744\n",
      "epoch  35  loss      :  521.089526951313\n",
      "epoch  35  accuracy  :  0.99956363\n",
      "epoch  35  accuracy_t:  0.9748\n",
      "epoch  36  loss      :  485.3682134747505\n",
      "epoch  36  accuracy  :  0.9996182\n",
      "epoch  36  accuracy_t:  0.9763\n",
      "epoch  37  loss      :  452.4740563631058\n",
      "epoch  37  accuracy  :  0.9996\n",
      "epoch  37  accuracy_t:  0.977\n",
      "epoch  38  loss      :  422.02210879325867\n",
      "epoch  38  accuracy  :  0.9998364\n",
      "epoch  38  accuracy_t:  0.9765\n",
      "epoch  39  loss      :  393.76475501060486\n",
      "epoch  39  accuracy  :  0.9995273\n",
      "epoch  39  accuracy_t:  0.9767\n",
      "epoch  40  loss      :  367.75175923109055\n",
      "epoch  40  accuracy  :  0.9996\n",
      "epoch  40  accuracy_t:  0.9758\n",
      "epoch  41  loss      :  343.6933779120445\n",
      "epoch  41  accuracy  :  0.9995818\n",
      "epoch  41  accuracy_t:  0.9764\n",
      "epoch  42  loss      :  321.1969795227051\n",
      "epoch  42  accuracy  :  0.99987274\n",
      "epoch  42  accuracy_t:  0.9775\n",
      "epoch  43  loss      :  300.3866038918495\n",
      "epoch  43  accuracy  :  0.99978185\n",
      "epoch  43  accuracy_t:  0.9782\n",
      "epoch  44  loss      :  281.18231815099716\n",
      "epoch  44  accuracy  :  0.9997636\n",
      "epoch  44  accuracy_t:  0.9774\n",
      "epoch  45  loss      :  263.38345700502396\n",
      "epoch  45  accuracy  :  0.9998909\n",
      "epoch  45  accuracy_t:  0.977\n",
      "epoch  46  loss      :  246.7581523358822\n",
      "epoch  46  accuracy  :  0.99985456\n",
      "epoch  46  accuracy_t:  0.9777\n",
      "epoch  47  loss      :  231.45766630768776\n",
      "epoch  47  accuracy  :  0.9998364\n",
      "epoch  47  accuracy_t:  0.9794\n",
      "epoch  48  loss      :  217.1773375570774\n",
      "epoch  48  accuracy  :  0.9998364\n",
      "epoch  48  accuracy_t:  0.9786\n",
      "epoch  49  loss      :  204.0246922969818\n",
      "epoch  49  accuracy  :  0.99994546\n",
      "epoch  49  accuracy_t:  0.9797\n",
      "训练准确率:  0.99994546\n",
      "测试准确率:  0.9797\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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ySefsGbNGmJjYyksLCQlJYWYmBi2bt3KkCFDmD17dpOPMluXPVkA5FlLKGPagqVLl7J27VoyMjIYMWIEy5cvZ/fu3fTv35/MzEweeeQRFi9eTIcOHRo918KFC7nqqquIiYnhlltu4d1338Xn87Fjxw569erFqFGjAOjQoQNut5ulS5fywAMP4HY7I0AEMyT5lClTiImJAaCiooLp06czZMgQpk6dWjOU+tKlS7n33nuJjY2tdd7p06cze/ZsPB4P77zzDrfddtvp/8JOgz1ZgNMSyhUJKX3CHYkxrc8ZPAGEiqpy77331lsZvXnzZj755BNefPFF3n33XV555ZVTnmvu3LmsXr2a9PR0APLy8lixYgVJSUn1DhEezJDkdYdHDxyS/He/+x09e/bkjTfeoKqqqmYGvYbOe8stt/Dcc88xYcIExo8fT3Jy8imv52zZkwUEtISKDHckxpizMHHiRN5++22OHDkCOK2m9u3bR35+PqrKLbfcwq9+9Su++uorABITEzl+/Pi3znP06FFWr15NTk5OzZDkL774InPnzmXw4MFkZ2fXnKO4uBiv18ukSZP485//XDPkeH1Dkr/77rsNxl5UVMQ555yDiDBnzhyqB3mdNGkSr732GidOnKh13ri4OK644gpmzpwZ8iIosGThsJZQxrQJQ4cO5amnnmLixIkMGzaMSZMmcfjwYfbv318zVPh9991XM9jetGnT+OEPf/itCu53332Xq666isjIk18gr7/+et5//31cLhdz587lwQcfrJkDu6Kigvvvv5+uXbvWzLn99ttvA/D000/z0EMPcfHFF5+ypdbMmTN59dVXGTduHNnZ2TVDl1977bVMnjy5pmjt97//fc0xd9xxB5GRkTXNiEMpZEOUN7czHqK8sgye6waXPe68jDGNsiHKW4YXXniBiooKnnrqqaD2P5shyq3OorIUhtwEPS8IdyTGGBO06667jv379/PZZ581y+dZskhIg5tfC3cUxhhzWj766KNm/TyrszDGGNMoSxbGmDPSVuo724uz/feyZGGMOW0xMTEUFBRYwmglVJWCgoKaDoBnwuosjDGnrUePHuTk5NAk0xmbZhETE0OPHj3O+HhLFsaY0xYZGUmfPjbiQXtixVDGGGMaZcnCGGNMoyxZGGOMaVSbGe5DRPKB7LM4RSfgSBOF05rYdbcvdt3tSzDX3VtV0xo7UZtJFmdLRNYFMz5KW2PX3b7YdbcvTXndVgxljDGmUZYsjDHGNMqSxUmnnjar7bLrbl/sutuXJrtuq7MwxhjTKHuyMMYY06h2nyxEZLKIZIpIloi06anyRGSWiOSJyNaAdSkiskREvvb/7BjOGJuaiPQUkWUiskNEtonII/71bf26Y0RkjYhs8l/3r/zr+4jIav91zxeRhuf5bMVExC0iG0TkY//79nLde0Vki4hsFJF1/nVN8rferpOFiLiBPwFXA4OA20RkUHijCqm/ApPrrHsc+FRVBwCf+t+3JR7gX1R1IDAOeNj/b9zWr7sCuEJVhwMjgMkiMg74DfB7/3UfBaaHMcZQegTYEfC+vVw3wOWqOiKgyWyT/K2362QBjAWyVHWPqlYC84ApYY4pZFR1BVBYZ/UUYI5/eQ5wfbMGFWKqekhVv/IvH8e5gXSn7V+3qmqJ/22k/6XAFcAC//o2d90AItIDuAZ41f9eaAfXfQpN8rfe3pNFd2B/wPsc/7r2pIuqHgLnxgp0DnM8ISMi6cBIYDXt4Lr9RTEbgTxgCbAbOKaqHv8ubfXv/T+BnwE+//tU2sd1g/OF4H9FZL2IzPCva5K/9fY+RLnUs86ah7VBIpIAvAv8WFWLnS+bbZuqeoERIpIMvA8MrG+35o0qtETkWiBPVdeLyGXVq+vZtU1dd4AJqnpQRDoDS0RkZ1OduL0/WeQAPQPe9wAOhimWcDksIucA+H/mhTmeJicikTiJ4k1Vfc+/us1fdzVVPQZ8jlNnkywi1V8S2+Lf+wTgeyKyF6dY+QqcJ422ft0AqOpB/888nC8IY2miv/X2nizWAgP8LSWigKnAwjDH1NwWAnf7l+8GPgxjLE3OX179GrBDVf9fwKa2ft1p/icKRCQWmIhTX7MMuNm/W5u7blV9QlV7qGo6zv/nz1T1Dtr4dQOISLyIJFYvA5OArTTR33q775QnIt/F+ebhBmap6rNhDilkRGQucBnOSJSHgaeAD4C3gV7APuAWVa1bCd5qichFwD+ALZwsw/5XnHqLtnzdw3AqM904XwrfVtVnRKQvzjfuFGADcKeqVoQv0tDxF0M9pqrXtofr9l/j+/63EcBbqvqsiKTSBH/r7T5ZGGOMaVx7L4YyxhgTBEsWxhhjGmXJwhhjTKMsWRhjjGmUJQtjjDGNsmRhTBiJyGXVI6Ma05JZsjDGGNMoSxbGBEFE7vTPD7FRRP7LP0hfiYj8TkS+EpFPRSTNv+8IEVklIptF5P3q+QNEpL+ILPXPMfGViPTznz5BRBaIyE4RedPf6xwReUFEtvvP89swXboxgCULYxolIgOBW3EGaRsBeIE7gHjgK1UdBSzH6REP8Drwc1UdhtNzvHr9m8Cf/HNMXAgc8q8fCfwYZ06VvsAEEUkBbgAG+8/zb6G9SmNOzZKFMY27EhgNrPUP+X0lzk3dB8z37/MGcJGIdACSVXW5f/0c4BL/mD3dVfV9AFUtV9Uy/z5rVDVHVX3ARiAdKAbKgVdF5Eagel9jwsKShTGNE2COf/axEap6nqo+Xc9+pxo751RjogeOUeQFIvxzL4zFGS33euDvpxmzMU3KkoUxjfsUuNk/R0D1nMa9cf7/VI9kejvwhaoWAUdF5GL/+ruA5apaDOSIyPX+c0SLSFxDH+iff6ODqi7CKaIaEYoLMyZY7X3yI2MaparbReQXODOQuYAq4GGgFBgsIuuBIpx6DXCGgf6LPxnsAab5198F/JeIPOM/xy2n+NhE4EMRicF5Knm0iS/LmNNio84ac4ZEpERVE8IdhzHNwYqhjDHGNMqeLIwxxjTKniyMMcY0ypKFMcaYRlmyMMYY0yhLFsYYYxplycIYY0yjLFkYY4xp1P8HUE/5enxYbDcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_neural_network(X=x, Y=y, epochs=50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "毫无疑问，这个模型是一个非常简陋，性能也不理想的模型。目前只能达到92%左右的准确率。\n",
    "接下来，希望大家利用现有的知识，将这个模型优化至98%以上的准确率。\n",
    "Hint：\n",
    "- 多隐层\n",
    "- 激活函数\n",
    "- 正则化\n",
    "- 初始化\n",
    "- 摸索一下各个超参数\n",
    "  - 隐层神经元数量\n",
    "  - 学习率\n",
    "  - 正则化惩罚因子\n",
    "  - 最好每隔几个step就对loss、accuracy等等进行一次输出，这样才能有根据地进行调整"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
